package br.uniceub.fsw.academicmobile.dao;

import java.sql.ResultSet;

import br.uniceub.fsw.academicmobile.vo.CursoVO;
import br.uniceub.fsw.academicmobile.vo.DisciplinaVO;
import java.util.ArrayList;
import br.uniceub.fsw.academicmobile.vo.ProfessorVO;
import br.uniceub.fsw.academicmobile.vo.TurmaVO;

/**
 * Dao responsável pelas operaçoes de banco associadas ao objeto Curso
 * @author Dejavu
 */
public class CursoDAO {

    private BD bd;

    public CursoDAO() {
            bd = new BD();
    }

    /**
     * Retorna Curso a partir da disciplina
     * @param disciplina vo carregando id da disciplina
     * @return CursoVO objeto curso
     */
    public CursoVO consultarCursoPorDisciplina(DisciplinaVO disciplina){
            String SQL = "SELECT * FROM tb_curso WHERE ID_CD_curso=<01>";
            SQL = SQL.replaceAll("<01>", disciplina.getTbCursoIdCdCurso().toString());
            CursoVO retorno = new CursoVO();
            try{
                    ResultSet rs = bd.getResultSet(SQL);
                    if(rs.next()){
                            retorno.setIdCdCurso(rs.getInt("ID_CD_curso"));
                            retorno.setNoCurso(rs.getString("NO_curso"));
                            retorno.setTbFaculdadeIdCdFaculdade(rs.getInt("tb_faculdade_ID_CD_faculdade"));
                    }
                    rs.close();
            } catch (Exception ex) {
                    System.err.println("CursoDAO.consultarCursoPorDisciplina:"
                                    + ex.getMessage());
            }
            return retorno;
    }

    /**
     * Retorna Curso a partir de seu id
     * @param curso vo carregando o id do curso
     * @return CursoVO objeto curso
     */
    public CursoVO consultarCursoPorId(CursoVO curso){
        String SQL = "SELECT * FROM tb_curso WHERE ID_CD_curso=<01>";
            SQL = SQL.replaceAll("<01>", curso.getIdCdCurso().toString());
            CursoVO retorno = new CursoVO();
            try{
                    ResultSet rs = bd.getResultSet(SQL);
                    if(rs.next()){
                            retorno.setIdCdCurso(rs.getInt("ID_CD_curso"));
                            retorno.setNoCurso(rs.getString("NO_curso"));
                            retorno.setTbFaculdadeIdCdFaculdade(rs.getInt("tb_faculdade_ID_CD_faculdade"));
                    }
                    rs.close();
            } catch (Exception ex) {
                    System.err.println("CursoDAO.consultarCursoPorId:"
                                    + ex.getMessage());
            }
            return retorno;
    }
    
    /**
     * Retorna os cursos aos quais o professor está associado
     * @param pVO vo carregando id do professor
     * @return ArrayList lista com cursos associados ao professor
     * @throws java.lang.Exception
     */
    public ArrayList<CursoVO> getCursoForProfessor(ProfessorVO pVO) throws Exception{
        ArrayList<CursoVO> lista = new ArrayList();
        TurmaDAO daoTurma = new TurmaDAO();
        boolean exists=false;
    	for(TurmaVO tVO:daoTurma.getTurmaForProfessor(pVO)){
            if(!lista.isEmpty()){
            	for(CursoVO cVO:lista){
            		if(cVO.getIdCdCurso()==tVO.getCurso().getIdCdCurso()){
            			exists=true;
            		}
            	}
            	if(!exists){
            	lista.add(tVO.getCurso());
            	}
            }else{
            	lista.add(tVO.getCurso());
            } 
    		
            
    	}
		return lista;
	}
    
}
